using System.Collections.Generic;
using System.Threading.Tasks;

using Volo.Abp.Application.Services;

namespace Leo.Core.Application.Contracts
{
    // TODO Leo.Core.Application implementation
    public interface IBaseCrudAppService<TGetOutputDto,
                                          TGetListOutputDto,
                                          TPagedResultDto,
                                          in TKey,
                                          in TGetListInput,
                                          in TCreateInput,
                                          in TUpdateInput,
                                          in TGetListPageInput>
                        : ICrudAppService<TGetOutputDto,
                                          TGetListOutputDto,
                                          TKey,
                                          TGetListInput,
                                          TCreateInput,
                                          TUpdateInput>
    {
        Task<List<TGetListOutputDto>> Query(TGetListInput getListInput);

        Task<long> QueryCount(TGetListInput getListInput);

        Task<TPagedResultDto> QueryByPage(TGetListPageInput getListPageInput);
    }
}
